/**
 * @typedef Right 权限
 * @property {string} id
 * @property {string} title
 * @property {string} key 页面路径
 * @property {number?} pagepermisson 是否为页面权限。若该属性存在，则权限控制是路由级别的（直接不显示）；否则是页面级别的。
 * @property {number?} routepermisson 是否为路由权限。具体是带路径参数的路由。
 * @property {number} grade
 * @property {Right[]} children
 */

/**
 * @typedef Role 角色
 * @property {string} id
 * @property {string} roleName
 * @property {number} roleType 1 超级管理员，2 区域管理员，3 区域编辑
 * @property {string[]} rights
 */

/**
 * @typedef User 用户
 * @property {string} id
 * @property {string} username
 * @property {number} password
 * @property {boolean} roleState 是否启用该用户 
 * @property {boolean} default 是否为不可修改/删除的用户
 * @property {string} region
 * @property {string} roleId
 */

/**
 * @typedef Region 区域
 * @property {string} id
 * @property {string} title
 * @property {string} value
 */

/**
 * @typedef Category 分类
 * @property {string} id - 分类的唯一标识符。
 * @property {string} title - 分类的标题。
 * @property {string} value - 分类的值。
 */

/**
 * @typedef News 新闻
 * @property {string} region 区域
 * @property {string} author 作者
 * @property {string} roleId 角色ID
 * @property {number} auditState 审核状态。0=未审核，1=正在审核，2=已通过，3=未通过
 * @property {number} publishState 发布状态。0=未发布，1=待发布，2=已发布，3=已下线
 * @property {number} createTime 创建时间。格式为时间戳。
 * @property {number} star 点赞数
 * @property {number} view 浏览数
 * @property {number} publishTime 发布时间
 * @property {string} title 标题
 * @property {string} categoryId 分类ID
 * @property {string} content 内容
 * @property {string} id 新闻ID
 */

/** @typedef {User & {role: Role}} UserRoleDTO */
/** @typedef {News & {role: Role, category: Category}} NewsCategoryRoleDTO */

/** @typedef {UserRoleDTO} Token 保存在本地 localStorage 里的数据类型 */

/**
 * @template T
 * @typedef {[T, React.Dispatch<React.SetStateAction<T>>]} ReactState
 */

export {};